import express from 'express';
import cors from 'cors'; // 引入 cors 中间件
import { exec } from 'child_process';
import fs from 'fs';
import csvParser from 'csv-parser';

const app = express();

const port = 3000;

// 使用 cors 中间件
app.use(cors());

// 中间件用于解析 JSON 请求体
app.use(express.json());

// 启动服务器并监听 3000 端口
app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}`);
});

// 读取 CSV 文件
function readCsvFile(filePath) {
  return new Promise((resolve, reject) => {
    const results = [];
    fs.createReadStream(filePath)
      .pipe(csvParser())
      .on('data', (row) => {
        results.push(row);
      })
      .on('end', () => {
        resolve(results);
      })
      .on('error', (err) => {
        reject(err);
      });
  });
}

// 调用 Python 爬虫脚本并读取 CSV 文件
async function callPythonCrawler() {
  return new Promise(async (resolve, reject) => {
    exec('python crawler.py', (error, stdout, stderr) => {
      if (error) {
        reject(error);
        return;
      }
      readCsvFile('豆瓣电影Top250.csv')
        .then((data) => resolve(data))
        .catch((err) => reject(err));
    });
  });
}

// GET 接口，用于获取 data
app.get('/api/data', async (req, res) => {
  try {
    const data = await callPythonCrawler();
    res.json(data);
  } catch (err) {
    res.status(400).json('Error: ' + err);
  }
});